/*
 * @Author: 一盏青灯欲锁魂
 * @Date: 2021-06-15 16:32:50
 * @LastEditTime: 2021-06-24 17:15:05
 * @Description: 控制器
 * @FilePath: \nest_demo\src\module\index\index.controller.ts
 */
import { Controller, Get, Post, Body, UseGuards } from '@nestjs/common';
import { AuthService } from './auth.service';
import { AuthGuard } from '@nestjs/passport';

/*
    * jwt操作步骤：
    *   1. 安装'@nestjs/Passport'和'Passport'包，这是核心包必须安装的 
    *       -> npm install --save @nestjs/passport passport
    * 
    *   2. 根据自身需要安装指定策略包'passport-jwt'或者'passport-local',这里都安装了 
    *       -> npm install --save passport-local
    *       -> npm install @nestjs/jwt passport-jwt
    * 
    *   3. 再安装TS声明文件 -> npm install --save-dev @types/passport-local @types/passport-jwt
    * 
    *   4. 使用@UseGuards()与AuthGuard()映射'local'策略，并自定义'local.strategy.ts'策略文件
    * 
    *   5. 自定义jwt策略文件，通过jwt最终返回token数据
    * 
    *   6. 在auth.module.ts中注入'local策略'、'jwt策略'（重点）
*/

@Controller('/auth')
export class AuthController {
    constructor(private readonly authService: AuthService) { }

    // 登录测试
    @UseGuards(AuthGuard('local'))
    @Post('login')
    async login(@Body() { username, password }) {

        // 返回最终token数据
        return this.authService.login(username, password);
    }

    // 鉴权token - 必须携带正常的token才能访问
    @UseGuards(AuthGuard('jwt'))
    @Get()
    checkAuth() {
        return this.authService.checkAuth();
    }
}